package ar.com.sne.model.bo.geo;

import java.util.ArrayList;
import java.util.List;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.log4j.Logger;

import ar.com.sne.bean.BaseBO;
import ar.com.sne.model.bo.per.PerCliente;
import ar.com.sne.model.dao.factory.GeoDAOFactory;

/**
 * GeoPlanta
 * Clase encargada de encapsular la logica de geografia para plantas acopiadoras.
 */

@Entity
@Table(name = "GEO_PLANTAS", catalog = "sneweb")
public class GeoPlanta extends BaseBO {

	private int idDomicilio;
	private int nombre;
	private String tipo;
	private String cuit;
	private List<PerCliente> perClienteses = new ArrayList<PerCliente>();

	@Transient
	Logger log = Logger.getLogger(GeoPlanta.class);
	
	/*
	 * Contructores 
	 */
	
	public GeoPlanta() {
		super();
	}
	
	/*
	 * Getter & Listters
	 */

	@Column(name = "id_domicilio")
	public int getIdDomicilio() {
		return this.idDomicilio;
	}

	public void setIdDomicilio(int idDomicilio) {
		this.idDomicilio = idDomicilio;
	}

	@Column(name = "nombre", nullable = false)
	public int getNombre() {
		return this.nombre;
	}

	public void setNombre(int nombre) {
		this.nombre = nombre;
	}

	@Column(name = "tipo", length = 45)
	public String getTipo() {
		return this.tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	@Column(name = "cuit", nullable = false, length = 50)
	public String getCuit() {
		return this.cuit;
	}

	public void setCuit(String cuit) {
		this.cuit = cuit;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "geoPlantas")
	public List<PerCliente> getPerClienteses() {
		return this.perClienteses;
	}

	public void setPerClienteses(List<PerCliente> perClienteses) {
		this.perClienteses = perClienteses;
	}

	/*
	 * Metodos de Clase
	 */
	
	public static GeoPlanta getById(Long id){
		return (GeoPlanta) GeoDAOFactory.getGeoPlantaDAO().getById(id);
	}
	
	public static GeoPlanta getByIdNull(Long id) {
		return (GeoPlanta) GeoDAOFactory.getGeoPlantaDAO().getByIdNull(id);
	}
	
	public static List<GeoPlanta> getList() {
		return (List<GeoPlanta>) GeoDAOFactory.getGeoPlantaDAO().getList();
	}
	
	public static List<GeoPlanta> getListActivos() {			
		return (List<GeoPlanta>) GeoDAOFactory.getGeoPlantaDAO().getListActiva();
	}
}
